﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SST_BL;
using System.Data;

namespace TCU
{
    public partial class Manejo_Informaticos : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {            
            if(!IsPostBack){
                string user = Request.ServerVariables["REMOTE_USER"].ToString();

                bool IsCoordinador = MainBL.IsCoordinadorTI(user.Substring(user.IndexOf("\\") + 1));
                bool IsAdmin = MainBL.RevisarPermiso(user.Substring(user.IndexOf("\\") + 1), "Administrador");

                if (IsAdmin || IsCoordinador )                
                    this.CargarInformaticos();                                    
                else                
                    Server.Transfer("NoAccess.aspx");
                
           
            }
        }//protected void Page_Load(object sender, EventArgs e)

        private void RevisarRoles() {
            MainBL.RevisarRoles();
        }//private void RevisarRoles() { 

        private void CargarInformaticos() {
                
            if (MainBL.ExistenCircuitosEnBD())
            {
                if (MainBL.ExistenHorariosEnBD())
                {
                    string user = Request.ServerVariables["REMOTE_USER"].ToString();
                    bool IsCoordinador = MainBL.IsCoordinadorTI(user.Substring(user.IndexOf("\\") + 1));
                    bool IsAdmin = MainBL.RevisarPermiso(user.Substring(user.IndexOf("\\") + 1), "Administrador");
                    DataTable dt = null;

                    if (IsAdmin)
                        dt = MainBL.ListarInformaticos();
                    else if (IsCoordinador)
                        dt = MainBL.ListarInformaticosDeCooridador(user.Substring(user.IndexOf("\\") + 1));

                    if (dt == null)
                    {
                        dt = new DataTable();
                        dt.Columns.Add("HorarioID", typeof(int));
                        dt.Columns.Add("Nombre", typeof(string));
                        dt.Columns.Add("Rol", typeof(string));
                        dt.Columns.Add("Circuito", typeof(string));
                        dt.Columns.Add("Horario", typeof(string));
                        dt.Rows.Add(0, "No hay ningun informatico...");
                        gvInformaticos.AutoGenerateDeleteButton = false;
                        gvInformaticos.AutoGenerateEditButton = false;
                    }
                    else
                    {
                        gvInformaticos.AutoGenerateDeleteButton = true;
                        gvInformaticos.AutoGenerateEditButton = true;
                    }
                    gvInformaticos.DataSource = dt;
                    gvInformaticos.DataBind();
                    Informaticos.Visible = true;
                }else{
                    Informaticos.Visible = false;
                    notificacion.Text = "No existen Horarios en el sistema, presiona <a href='ManejoHorarios.aspx'>aqui</a> para agregar Horarios en el sistema!";
                }     
            }
            else {
                Informaticos.Visible = false;
                notificacion.Text = "No existen Circuitos en el sistema, presiona <a href='ManejoCircuito.aspx'>aqui</a> para agregar Circuitos en el sistema!";
            }
            
        }//private void CargarInformaticos() { 
        
        protected void Informaticos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Agregar"))
            {

                notificacion.ForeColor = System.Drawing.Color.Red;
                TextBox txtNombre = gvInformaticos.FooterRow.FindControl("txtNombre") as TextBox;
                DropDownList dropRol = gvInformaticos.FooterRow.FindControl("dropRol") as DropDownList;
                //DropDownList dropCircuito = gvInformaticos.FooterRow.FindControl("dropInformaticoCircuito") as DropDownList;

                ListBox listCircuitos = gvInformaticos.FooterRow.FindControl("listAddCircuito") as ListBox;

                DropDownList dropHorario = gvInformaticos.FooterRow.FindControl("dropHorario") as DropDownList;
                if (txtNombre.Text.Length > 0)
                {
                    if (!MainBL.ExisteInformatico(txtNombre.Text))
                    {
                        List<int> circuitos = new List<int>();
                        for (int i = 0; i < listCircuitos.Items.Count ; i++) 
                            if (listCircuitos.Items[i].Selected) 
                                circuitos.Add(int.Parse(listCircuitos.Items[i].Value));                                                  
                        bool agregado = MainBL.AgregarInformatico(txtNombre.Text, dropRol.SelectedValue.ToString(), circuitos.ToArray(), int.Parse(dropHorario.SelectedValue.ToString()));
                        this.CargarInformaticos();
                        if (agregado)
                        {
                            notificacion.Text = "El informatico fue creado! ";
                            notificacion.ForeColor = System.Drawing.Color.Green;
                        }
                        else
                        {
                            notificacion.Text = "El informatico no pudo ser creado ocurrio un error! ";
                        }
                    }
                    else
                    {
                        notificacion.Text = "Ya existe un informatico con este nombre!";
                    }//if (!MainBL.ExisteInformatico(txtNombre.Text))                 
                }
                else
                {
                    notificacion.Text = "Debes de elegir un nombre para el informatico!";
                }//if (txtNombre.Text.Length > 0)

                /*notificacion.ForeColor = System.Drawing.Color.Red;
                TextBox txtNombre = gvInformaticos.FooterRow.FindControl("txtNombre") as TextBox;
                DropDownList dropRol = gvInformaticos.FooterRow.FindControl("dropRol") as DropDownList;
                DropDownList dropCircuito = gvInformaticos.FooterRow.FindControl("dropInformaticoCircuito") as DropDownList;
                DropDownList dropHorario = gvInformaticos.FooterRow.FindControl("dropHorario") as DropDownList;
                if (txtNombre.Text.Length > 0)
                {
                    if (!MainBL.ExisteInformatico(txtNombre.Text))
                    {
                        bool agregado = MainBL.AgregarInformatico(txtNombre.Text, dropRol.SelectedValue.ToString(), dropCircuito.SelectedValue.ToString(), int.Parse(dropHorario.SelectedValue.ToString()));
                        this.CargarInformaticos();
                        if (agregado)
                        {
                            notificacion.Text = "El informatico fue creado! ";
                            notificacion.ForeColor = System.Drawing.Color.Green;
                        }
                        else {
                            notificacion.Text = "El informatico no pudo ser creado ocurrio un error! ";
                        }
                    }
                    else {
                        notificacion.Text = "Ya existe un informatico con este nombre!";
                    }//if (!MainBL.ExisteInformatico(txtNombre.Text))                 
                }
                else {
                    notificacion.Text = "Debes de elegir un nombre para el informatico!";
                }//if (txtNombre.Text.Length > 0)*/
            }//if (e.CommandName.Equals("Agregar"))
        }//protected void Informaticos_RowCommand(object sender, GridViewCommandEventArgs e)

        protected void gvInformaticos_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            Label id = gvInformaticos.Rows[e.RowIndex].FindControl("lbID") as Label;
            if (MainBL.EliminarInformatico(int.Parse(id.Text)))
            {
                notificacion.Text = "El informatico fue eliminado! ";
                notificacion.ForeColor = System.Drawing.Color.Green;
            }
            else {
                notificacion.Text = "El informatico no pudo ser eliminado!";
                notificacion.ForeColor = System.Drawing.Color.Red;
            }
            this.CargarInformaticos();
        }

        protected void gvInformaticos_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvInformaticos.EditIndex = e.NewEditIndex;
            this.CargarInformaticos();
            Label lbID = gvInformaticos.Rows[e.NewEditIndex].FindControl("lbEditID") as Label;

            int[] circuitoInformatico = MainBL.GetCircuitoInformatico(int.Parse(lbID.Text));

            if (circuitoInformatico == null)
            {
                notificacion.Text = "El circuito donde se encontraba este informatico ya <b>no existe</b> favor escoger uno nuevo!";
            }
            else
            {
                ListBox listCircuitos = gvInformaticos.Rows[e.NewEditIndex].FindControl("listEditCircuito") as ListBox;
                for (int i = 0; i < circuitoInformatico.Length; i++) 
                    if (circuitoInformatico != null && circuitoInformatico.Length > 0 && int.Parse(listCircuitos.Items[i].Value) == circuitoInformatico[i])
                        listCircuitos.Items[i].Selected = true;
                

                DropDownList list = (DropDownList)gvInformaticos.Rows[e.NewEditIndex].FindControl("dropEditRol");
                string InformaticoRolNombre = MainBL.GetRolInformatico(int.Parse(lbID.Text));
                ListItem selectedListItem = list.Items.FindByValue(InformaticoRolNombre);
                if (selectedListItem != null)
                    selectedListItem.Selected = true;    
            }

            
            
            
        }

        protected void gvInformaticos_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            notificacion.ForeColor = System.Drawing.Color.Red;
            Label lbID = gvInformaticos.Rows[e.RowIndex].FindControl("lbEditID") as Label;
            TextBox txtEditNombre = gvInformaticos.Rows[e.RowIndex].FindControl("txtEditNombre") as TextBox;
            DropDownList dropEditRol = gvInformaticos.Rows[e.RowIndex].FindControl("dropEditRol") as DropDownList;
            //DropDownList dropAddCircuito = gvInformaticos.Rows[e.RowIndex].FindControl("dropInformaticoCircuito") as DropDownList;

            ListBox listCircuitos = gvInformaticos.Rows[e.RowIndex].FindControl("listEditCircuito") as ListBox;

            DropDownList dropHorario = gvInformaticos.Rows[e.RowIndex].FindControl("dropEditHorario") as DropDownList;

            if (txtEditNombre.Text.Length > 0)
            {
                if (!MainBL.ExisteInformatico(txtEditNombre.Text) || MainBL.GetNombreInformatico(int.Parse(lbID.Text)) == txtEditNombre.Text)
                {
                    List<int> circuitos = new List<int>();
                    for (int i = 0; i < listCircuitos.Items.Count; i++)
                        if (listCircuitos.Items[i].Selected)
                            circuitos.Add(int.Parse(listCircuitos.Items[i].Value));  

                    bool wasModified = MainBL.EditarInformatico(int.Parse(lbID.Text),
                                                                txtEditNombre.Text,
                                                                dropEditRol.SelectedValue.ToString(),
                                                                circuitos.ToArray(),
                                                                int.Parse(dropHorario.SelectedValue.ToString()));
                    gvInformaticos.EditIndex = -1;
                    this.CargarInformaticos();
                    notificacion.Text = "El informatico fue modificado! ";
                    notificacion.ForeColor = System.Drawing.Color.Green;
                }
                else
                {
                    notificacion.Text = "Ya existe un informatico con este nombre!";
                }
            }
            else {
                notificacion.Text = "Debes de elegir un nombre para el informatico!";
            }
        }

        protected void gvInformaticos_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvInformaticos.EditIndex = -1;
            this.CargarInformaticos();
        }//protected void Informaticos_RowCommand(object sender, GridViewCommandEventArgs e)
      
    }//public partial class Manejo_Informaticos : System.Web.UI.Page
}//namespace TCU